package com.example.shuiyin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.shuiyin.dto.ProcessRecordDto;
import com.example.shuiyin.entity.ProcessRecord;

import java.util.List;

public interface ProcessRecordService {
    /**
     * 创建处理记录
     * @param record 处理记录
     * @return 创建后的记录
     */
    ProcessRecord createRecord(ProcessRecord record);
    
    /**
     * 更新处理记录
     * @param record 处理记录
     * @return 更新后的记录
     */
    ProcessRecord updateRecord(ProcessRecord record);
    
    /**
     * 根据ID查找记录
     * @param id 记录ID
     * @return 处理记录
     */
    ProcessRecord findById(Long id);
    
    /**
     * 分页查询用户的处理记录
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 分页记录
     */
    Page<ProcessRecord> findPageByUserId(Long userId, int page, int size);
    
    /**
     * 查询用户最近的处理记录
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 处理记录列表
     */
    List<ProcessRecord> findRecentByUserId(Long userId, int limit);
    
    /**
     * 根据ID和用户ID查找记录
     * @param id 记录ID
     * @param userId 用户ID
     * @return 处理记录
     */
    ProcessRecord findByIdAndUserId(Long id, Long userId);

    /**
     * 获取用户处理历史
     * @param userId 用户ID
     * @param page 页码
     * @param limit 每页条数
     * @return 处理历史DTO分页对象
     */
    Page<ProcessRecordDto> getProcessHistory(Long userId, int page, int limit);

    /**
     * 检查用户是否有权限访问指定文件
     * @param filename 文件名
     * @param userId 用户ID
     * @return 是否有访问权限
     */
    boolean checkFileAccess(String filename, Long userId);
    
    /**
     * 检查文件是否可以公开访问
     * @param filename 文件名
     * @return 是否可以公开访问
     */
    boolean isFilePublicAccessible(String filename);
}